package main

func main() {
	// 1. 基础数据类型
	// 布尔型
	//var numBool bool = true

	// 数值型
	//var numInt int = 20
	//var numFloat float32 = 12345678.123456789
	//var numFloat64 float64 = 12345678.123456789
	//// %f:浮点型占位符，.前的指宽度，.后的数指小数点精度
	//fmt.Printf("%T, %3.4f\n", numFloat, numFloat)
	//fmt.Printf("%T, %4.5f\n", numFloat64, numFloat64)

	// 字符串类型
	//var str string = "hello" + ", world!"
	//fmt.Println(str)
	//
	//var a = 'A'
	//var b = "A"
	//fmt.Printf("%T, %d\n", a, a)
	//fmt.Printf("%T, %s\n", b, b)

	// 字符串基础工具类：strings
	//str := "hello WORLD"
	//index := strings.Index(str, "o")		// 查找 参数二 的下标
	//fmt.Println(index)
	//fmt.Println(string(str[index]))				// 根据下标找到字符（返回int类型，要转为string类型）
	//fmt.Println(str[:4])		// 根据下标截取字符串，从0截取到4，包含开始不含结尾
	//fmt.Println(str[4:])		// 根据下标截取字符串，从4截取到末尾的下标，包含开始不含结尾
	//fmt.Println(str[:])			// 从头截尾，等于字符串本身
	//fmt.Println(strings.ToUpper(str))			// 全部转为大写
	//fmt.Println(strings.ToLower(str))			// 全部转为小写
	//fmt.Println(strings.HasPrefix(str, "hel"))	// 是否以 参数二 开头
	//fmt.Println(strings.HasSuffix(str, "ld"))		// 是否以 参数二 结尾
	//fmt.Println(strings.Contains(str, "o W"))		// 是否包含 参数二
	//
	//str2 := "   abcdefg   "
	//fmt.Println(strings.Trim(str2, " "))		// 去除左右两侧的字符(参数二)
	//fmt.Println(strings.TrimSpace(str2))		// 去除左右两侧空格字符
	//fmt.Println(strings.TrimLeft(str2, " "))		// 去除左侧的字符(参数二)
	//fmt.Println(strings.TrimRight(str2, " "))		// 去除右侧的字符(参数二)
	//
	//str3 := "how are you?"
	//split := strings.Split(str3, " ")		// 使用 参数二 将字符串分割为数组
	//fmt.Println(split, reflect.TypeOf(split))
	//join := strings.Join(split, ",")		// 使用 参数二 将数组拼接为字符串
	//fmt.Println(join, reflect.TypeOf(join))

	// 2. 类型转换
	//a := 5
	//b := float32(a)
	//c := 123.1234567
	//d := float32(c)

	//fmt.Printf("%T, %d\n", a, a)
	//fmt.Printf("%T, %.8f\n", b, b)
	//fmt.Printf("%T, %.8f\n", c, c)
	//fmt.Printf("%T, %.8f\n", d, d)

	// 字符串转换基础包：strconv
	//num1 := "12"
	//atoi, _ := strconv.Atoi(num1)		// 字符串 --> int
	//fmt.Println(atoi, reflect.TypeOf(atoi))
	//itoa := strconv.Itoa(atoi)			// int --> 字符串
	//fmt.Println(itoa, reflect.TypeOf(itoa))

	// Parse方法，转换所有类型
	//var (
	//	parse1 = "66"
	//	parse2 = "127"
	//	parse3 = "123.462"
	//	parse4 = "t"
	//)
	//// p1:字符串，p2:进制，p3:位数
	//fmt.Println(strconv.ParseInt(parse1, 10, 64))
	//// p1:字符串，p2:进制，p3:位数
	//fmt.Println(strconv.ParseUint(parse2, 10, 64))
	//// p1:字符串，p2:位数（一般为64位）
	//fmt.Println(strconv.ParseFloat(parse3, 64))
	//// "1", "t", "T", "true", "TRUE", "True"		为true
	//// "0", "f", "F", "false", "FALSE", "False"		为false
	//// 其他全为 false，且抛出异常
	//fmt.Println(strconv.ParseBool(parse4))

	// 3. 键盘录入
	//var a int
	//var b float32
	//fmt.Scanln(&a, &b)
	//fmt.Scan(&a, &b)
	//fmt.Scanf("%d", &a, &b)
	//
	//fmt.Println(a, b)
	//fmt.Print(a, b)
	//fmt.Printf("%T，%d, %d", a, b)

	// 4. if语句
	//var score float32
	//fmt.Println("请输入成绩：")
	//_, _ = fmt.Scanln(&score)
	//if score <= 100 && score > 90 {
	//	fmt.Println("优秀")
	//} else if score <= 90 && score > 80 {
	//	fmt.Println("良好")
	//} else if score <= 80 && score > 60 {
	//	fmt.Println("中等")
	//} else {
	//	fmt.Println("不及格")
	//}

	// 5. switch循环
	//switch score {
	//case 90:
	//	fmt.Println("优秀")
	//	fallthrough
	//case 80, 70, 60:
	//	if score == 90 {
	//		fmt.Println("case穿透")
	//		//break
	//	}
	//	fmt.Println("中等")
	//default:
	//	fmt.Println("不及格")
	//}

	// 6. for循环
	//for i := 0; i < 10; i++ {
	//	fmt.Println(i)
	//}
	//
	//i := 0
	//for ;i < 10; {
	//	fmt.Println(i)
	//	i++
	//}
	//i := 0
	//for true {
	//	i *= i
	//	i++
	//	fmt.Println(i)
	//}

	// 九九乘法表
	//for i := 1; i <= 9; i++ {
	//	for j := 1; j <= i; j++ {
	//		fmt.Printf("%d * %d = %d\t", j, i, i*j)
	//	}
	//	fmt.Println()
	//}

	// 7. 递归函数
	//fmt.Println(digui(5))

}

func add(a, b int) (int, string) {
	return a + b, "加法运算"
}

func getSum(result int, nums ...int) int {
	for i := 0; i < len(nums); i++ {
		result += nums[i]
	}
	return result
}

/*
递归方法
*/
func digui(num int) int {
	if num == 1 {
		return 1
	} else {
		return digui(num-1) + num
	}
}
